Camofox:给 AI Agent 用的反指纹浏览器
Camofox:给 AI Agent 用的反指纹浏览器
AI Agent 需要上网,但 Playwright 被封、Headless Chrome 被指纹识别、Stealth 插件本身就是指纹。Camofox 换了个思路——直接在 C++ 层伪造一切。
一、它是什么?
Camofox(全称 camofox-browser)是一个开源的反检测浏览器服务器,专门为 AI Agent 设计。它把 Camoufox(一个在 C++ 层面做指纹伪造的 Firefox 分支)包装成了 REST API,让 Agent 可以像调接口一样操控一个"看起来完全正常"的浏览器。
项目地址:https://github.com/jo-inc/camofox-browser
核心定位很清晰:让 AI Agent 能访问真实的 Web,不被反爬系统拦截。
二、为什么需要它?
如果你做过任何涉及浏览器自动化的事情,你一定遇到过这些问题:
- Playwright / Puppeteer 裸跑:Google、Cloudflare 分分钟识别你是机器人
- Headless Chrome:缺少 GPU 渲染、WebGL 参数异常、
navigator.webdriver为 true,指纹特征太明显 - Stealth 插件:通过 JavaScript 注入来伪造属性,但注入行为本身就是一个可检测的指纹——反检测系统可以检测到 JS 原型链被篡改
- 换 IP / 换 User-Agent:只改了表面,Canvas、WebGL、AudioContext 这些深层指纹纹丝不动
问题的根源在于:JavaScript 层面的伪造,JavaScript 层面就能检测到。
Camofox 的底层引擎 Camoufox 选择了不同的路线——直接修改 Firefox 的 C++ 源码。navigator.hardwareConcurrency、WebGL renderer、AudioContext 输出、屏幕几何参数、WebRTC——全部在浏览器引擎内部就已经被替换了,JavaScript 拿到的就是"真实"的值,因为从 JS 的视角看,这些值确实是浏览器原生返回的。
没有 shim,没有 wrapper,没有 prototype 污染。
三、核心特性
C++ 级别的反检测
这是 Camofox 最核心的卖点。Camoufox 基于 Firefox,修改了浏览器引擎的 C++ 实现:
- Navigator 属性(设备、OS、硬件、浏览器版本等)
- 屏幕尺寸、分辨率、窗口和视口属性
- WebGL 参数、扩展、上下文属性、着色器精度
- AudioContext 输出
- 字体伪造与反指纹
- WebRTC 在协议层面伪造 IP
- 地理位置、时区、语言、Intl 对象
能过 Google、Cloudflare 和大多数主流反机器人系统。
为 Agent 优化的 API 设计
Camofox 不是让你手动操作浏览器的——它是给 AI Agent 调用的。API 设计围绕这个场景做了很多优化:
- Accessibility Snapshot:不返回臃肿的 HTML DOM,而是返回无障碍快照,体积比原始 HTML 小约 90%,对 LLM 更友好
- Element Refs:每个可交互元素分配稳定的
e1、e2、e3标识符,Agent 直接用 ref 点击,不用写 CSS selector - Search Macros:内置
@google_search、@youtube_search、@amazon_search、@reddit_search等 14 个搜索宏,一行命令完成搜索 - 大页面分页:自动截断过大的快照,支持 offset 分页
资源占用极低
空闲时内存占用约 40MB。浏览器实例在 5 分钟无活动后自动关闭,下次请求时重新启动。设计目标是能跑在树莓派或 $5 VPS 上。
会话隔离与持久化
- 每个用户独立的 Cookie 和 localStorage
- 会话状态自动持久化到
~/.camofox/profiles/,重启后恢复 - 支持导入 Netscape 格式的 Cookie 文件,跳过登录
代理与 GeoIP
支持简单代理和 Backconnect 旋转代理(Decodo、Bright Data、Oxylabs 等)。配置代理后,Camoufox 的 GeoIP 会自动将 locale、timezone、geolocation 设置为与代理出口 IP 一致,指纹和网络层完全匹配。
四、快速上手
本地运行
git clone https://github.com/jo-inc/camofox-browser
cd camofox-browser
npm install
npm start # 首次运行会下载 Camoufox (~300MB)
# → http://localhost:9377
Docker
# 构建并启动(自动检测 CPU 架构)
make up
# 停止
make down
基本使用
# 创建标签页
curl -X POST http://localhost:9377/tabs \
-H 'Content-Type: application/json' \
-d '{"userId": "agent1", "url": "https://example.com"}'
# 获取无障碍快照(带元素引用)
curl "http://localhost:9377/tabs/TAB_ID/snapshot?userId=agent1"
# → { "snapshot": "[button e1] Submit [link e2] Learn more", ... }
# 通过 ref 点击元素
curl -X POST http://localhost:9377/tabs/TAB_ID/click \
-H 'Content-Type: application/json' \
-d '{"userId": "agent1", "ref": "e1"}'
# 使用搜索宏
curl -X POST http://localhost:9377/tabs/TAB_ID/navigate \
-H 'Content-Type: application/json' \
-d '{"userId": "agent1", "macro": "@google_search", "query": "best coffee beans"}'
五、架构设计
Browser Instance (Camoufox)
└── User Session (BrowserContext) - 隔离的 cookies/storage
├── Tab Group (sessionKey: "conv1")
│ ├── Tab (google.com)
│ └── Tab (github.com)
└── Tab Group (sessionKey: "conv2")
└── Tab (amazon.com)
关键设计决策:
- 一个浏览器实例,多个用户会话:通过 BrowserContext 实现隔离,不需要为每个用户启动独立浏览器
- Tab Group 概念:同一个用户的不同对话/任务可以有独立的标签页组
- 自动回收:会话 30 分钟不活动自动过期,标签页达到上限时自动回收最旧的
- 懒启动:浏览器只在有请求时才启动,空闲 5 分钟后关闭
六、为什么选 Firefox 而不是 Chromium?
这是 Camoufox 的一个重要设计选择,值得展开说:
- Chrome ≠ Chromium:Chrome 有很多 Chromium 没有的闭源功能,反爬系统可以检测你用的是 Chromium 而不是 Chrome。而 Chrome 是闭源的,打补丁困难得多
- CDP 是重灾区:Chrome DevTools Protocol 被广泛使用,也是反检测系统重点监控的目标。Firefox 的 Juggler 协议在更底层运行,JS 泄露更少
- Firefox 的指纹研究更成熟:Tor 项目、Arkenfox、CreepJS 等大量反指纹研究都基于 Firefox
- 沙箱隔离:Juggler 的内部 Page Agent JavaScript 运行在沙箱世界中,页面几乎无法检测到 Playwright 的存在
七、跟其他方案的对比
| 特性 | Camofox | Playwright + Stealth | Headless Chrome | 商业指纹浏览器 |
|---|---|---|---|---|
| 反检测层级 | C++ 引擎层 | JavaScript 注入 | 无 | 各家不同 |
| 过 Cloudflare | ✅ | 经常失败 | ❌ | 大多可以 |
| 过 Google | ✅ | 不稳定 | ❌ | 大多可以 |
| 为 Agent 设计 | ✅ REST API | 需要自己封装 | 需要自己封装 | 通常面向人工操作 |
| Token 效率 | 高(无障碍快照) | 低(完整 DOM) | 低(完整 DOM) | 不适用 |
| 开源 | ✅ MIT | ✅ | ✅ | 大多闭源 |
| 资源占用 | ~40MB 空闲 | 取决于浏览器 | 取决于浏览器 | 通常较重 |
八、适用场景
- AI Agent 网页浏览:这是它的主要设计目标。Agent 需要访问真实网页、填表、搜索、提取信息
- 数据采集:需要绕过反爬系统的场景
- 自动化测试:需要模拟真实用户环境的测试
- 多账号管理:会话隔离 + Cookie 导入 + 代理支持
不适合的场景
- 需要 Chrome 特有 API 的场景(它基于 Firefox)
- 纯粹的性能测试(反检测会带来一些开销)
- 不需要反检测的简单爬虫(杀鸡用牛刀)
九、注意事项
- 首次启动需要下载 Camoufox 二进制文件,约 300MB
- Docker 构建必须用
make up,不能直接docker build(依赖预下载的二进制文件) - Cookie 导入功能默认关闭,需要设置
CAMOFOX_API_KEY环境变量才能启用 - Camoufox 上游目前处于活跃开发中,2026 年的新版本是实验性的,可能有 breaking changes
十、总结
Camofox 解决了一个很具体的问题:让 AI Agent 能像正常人一样浏览网页。
它的技术路线很清晰——不在 JavaScript 层面做手脚,而是直接改浏览器引擎的 C++ 实现。这种方式从根本上避免了"伪造行为本身成为指纹"的悖论。再加上专门为 Agent 设计的 REST API、无障碍快照、元素引用系统,它确实填补了一个空白:介于底层反检测引擎和上层 Agent 框架之间的中间层。
如果你正在构建需要浏览真实网页的 AI Agent,Camofox 值得一试。